package com.yssoft.service.special;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yssoft.entity.special.TSFoodSafetyDisposalEntity;
import com.yssoft.entity.special.TsPersonnelEntity;
import com.yssoft.mapper.special.TSFoodSafetyDisposalMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.UUID;

@Service
public class TSFoodSafetyDisposalService extends ServiceImpl<TSFoodSafetyDisposalMapper, TSFoodSafetyDisposalEntity> {

    @Resource
    private TSFoodSafetyDisposalMapper foodSafetyDisposalMapper;

    /**
     * 新增涉嫌食品安全处置信息
     * @param foodSafetyDisposal 涉嫌食品安全处置信息实体
     * @return 新增成功返回true，否则返回false
     */
    /*@Override
    @Transactional
    public boolean save(TSFoodSafetyDisposalEntity foodSafetyDisposal) {
        foodSafetyDisposal.setUpdateBy("");
        // 1. 参数合法性校验
        if (foodSafetyDisposal == null) {
            throw new IllegalArgumentException("新增失败：涉嫌食品安全处置信息不能为空");
        }
        if (foodSafetyDisposal.getOccurTime() == null) {
            throw new IllegalArgumentException("新增失败：发生时间不能为空");
        }

        if (foodSafetyDisposal.getOccurCause() == null || foodSafetyDisposal.getOccurCause().trim().isEmpty()) {
            throw new IllegalArgumentException("新增失败：发生起因不能为空");
        }
        // 检查发生起因长度限制
        if (foodSafetyDisposal.getOccurCause().length() > 4000) {
            throw new IllegalArgumentException("新增失败：发生起因长度不能超过4000个字符");
        }
        if (foodSafetyDisposal.getDisposalInfo() == null || foodSafetyDisposal.getDisposalInfo().trim().isEmpty()) {
            throw new IllegalArgumentException("新增失败：食品安全事故处置信息不能为空");
        }
        // 检查处置信息长度限制
        if (foodSafetyDisposal.getDisposalInfo().length() > 4000) {
            throw new IllegalArgumentException("新增失败：处置信息长度不能超过4000个字符");
        }


        // 2. 设置默认值
        foodSafetyDisposal.setDelFlag(0); // 默认为正常数据
        Date currentTime = new Date();

        // 若未指定创建时间，使用当前时间
        if (foodSafetyDisposal.getCreateTime() == null) {
            foodSafetyDisposal.setCreateTime(currentTime);
        }
        // 3. 执行数据库插入操作
        int rowsAffected = foodSafetyDisposalMapper.insertSafe(foodSafetyDisposal);
        return rowsAffected > 0;
    }

    *//**
     * 软删除
     *//*
    @Transactional(rollbackFor = Exception.class)
    public boolean delete(TSFoodSafetyDisposalEntity entity) {
        LambdaUpdateWrapper<TSFoodSafetyDisposalEntity> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(TSFoodSafetyDisposalEntity::getId, entity.getId()) // 根据 id 匹配
                .set(TSFoodSafetyDisposalEntity::getDelFlag, "1"); // 设置 deleteId 的值
        return this.update(wrapper);
    }

    *//**
     * 根据ID逻辑删除涉嫌食品安全处置信息
     * @param id 主键ID
     * @param updateBy 更新人
     * @return 删除成功返回true，否则返回false
     *//*
    public boolean removeById(Long id, String updateBy) {
        // 1. 参数校验
        if (id == null || id <= 0) {
            throw new IllegalArgumentException("删除失败：ID不能为空且必须为正数");
        }
        if (updateBy == null || updateBy.trim().isEmpty()) {
            throw new IllegalArgumentException("删除失败：操作人不能为空");
        }

        // 2. 检查记录是否存在
        TSFoodSafetyDisposalEntity existingDisposal = foodSafetyDisposalMapper.selectById(id);
        if (existingDisposal == null) {
            throw new IllegalArgumentException("删除失败：ID为【" + id + "】的食品安全处置信息不存在或已被删除");
        }

        // 3. 执行逻辑删除（更新del_flag为1）
        int rowsAffected = foodSafetyDisposalMapper.deleteById(id, updateBy);
        return rowsAffected > 0;
    }

    *//**
     * 更新涉嫌食品安全处置信息
     * @param foodSafetyDisposal 涉嫌食品安全处置信息实体（需包含ID）
     * @return 更新成功返回true，否则返回false
     *//*
    public boolean update(TSFoodSafetyDisposalEntity foodSafetyDisposal) {
        //设置更新时间为当前时间
        foodSafetyDisposal.setUpdateTime(new Date());
        //执行更新操作
        int rowsAffected = foodSafetyDisposalMapper.updateSafeById(foodSafetyDisposal);
        return rowsAffected > 0;
    }

    *//**
     * 根据ID查询涉嫌食品安全处置信息
     * @param id 主键ID
     * @return 涉嫌食品安全处置信息实体，不存在则返回null
     *//*
    public TSFoodSafetyDisposalEntity getById(Long id) {
        // 参数校验
        if (id == null || id <= 0) {
            throw new IllegalArgumentException("查询失败：ID不能为空且必须为正数");
        }

        // 执行查询
        return foodSafetyDisposalMapper.selectById(id);
    }*/

    /**
     * 分页查询涉嫌食品安全处置信息
     * @param pageNum 页码（从1开始）
     * @param pageSize 每页条数
     * @return 涉嫌食品安全处置信息列表
     */
    public List<TSFoodSafetyDisposalEntity> listPage(int pageNum, int pageSize, Long companyId) {
        // 分页参数校验与修正
        if (pageNum < 1) {
            pageNum = 1; // 页码最小为1
        }
        if (pageSize < 1 || pageSize > 100) {
            pageSize = 10; // 限制每页最大记录数为100，默认10条
        }

        // 计算分页偏移量
        int offset = (pageNum - 1) * pageSize;

        // 执行分页查询
        return foodSafetyDisposalMapper.getAll(companyId);
    }

   /* *//**
     * 查询总记录数（未删除的数据）
     * @return 总记录数
     *//*
    public int getTotalCount(Long companyId) {
        return foodSafetyDisposalMapper.selectTotalCount(companyId);
    }

    *//**
     * 根据发生时间范围查询涉嫌食品安全处置信息
     * @param startOccurTime 开始发生时间
     * @param endOccurTime 结束发生时间
     * @return 涉嫌食品安全处置信息列表
     *//*
    public List<TSFoodSafetyDisposalEntity> getByOccurTimeRange(Date startOccurTime, Date endOccurTime) {
        // 参数校验
        if (startOccurTime == null) {
            throw new IllegalArgumentException("查询失败：开始发生时间不能为空");
        }
        if (endOccurTime == null) {
            throw new IllegalArgumentException("查询失败：结束发生时间不能为空");
        }
        if (startOccurTime.after(endOccurTime)) {
            throw new IllegalArgumentException("查询失败：开始发生时间不能晚于结束发生时间");
        }

        // 执行查询
        return foodSafetyDisposalMapper.selectByOccurTimeRange(startOccurTime, endOccurTime);
    }*/
    /**
     * 保存
     */
    @Transactional(rollbackFor = Exception.class)
    public boolean addTSFoodSafetyDisposal(TSFoodSafetyDisposalEntity entity){
/*
		tsThreeYearsSales.setCreateBy(loginUser.getId().toString());
*/
        if(this.save(entity)){
            return true;
        }
        return false;
    }

    /**
     * 修改根居ID
     */
    @Transactional(rollbackFor = Exception.class)
    public boolean update(TSFoodSafetyDisposalEntity entity) {
        if(this.updateById(entity)){
            return true;
        }
        return false;
    }

    /**
     * 软删除
     */
    @Transactional(rollbackFor = Exception.class)
    public boolean delete(TSFoodSafetyDisposalEntity entity) {
        entity.setDelFlag(1);
        return this.updateById(entity);
    }

}
